#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "./../../inc/login.h"
#include "./../../inc/homepage.h"

lv_obj_t * login_error   = NULL;
lv_obj_t * error_label   = NULL;
lv_timer_t * error_timer = NULL;

// 隐藏错误窗口的回调函数
static void hide_error_cb(lv_event_t * e)
{
    lv_obj_add_flag(login_error, LV_OBJ_FLAG_HIDDEN);
    if(error_timer) {
        lv_timer_del(error_timer);
        error_timer = NULL;
    }
}

// 定时器回调，自动隐藏错误窗口
static void timer_cb(lv_timer_t * timer)
{
    lv_obj_add_flag(login_error, LV_OBJ_FLAG_HIDDEN);
    error_timer = NULL;
}

// 显示错误窗口
void show_error_window(const char * error_message, int mode)
{
    if(login_error == NULL) {
        create_error_window(mode);
    } else {
        if(mode == 1) {
            lv_obj_set_size(login_error, LV_PCT(30), LV_PCT(20));
        } else {
            lv_obj_set_size(login_error, LV_PCT(60), LV_PCT(20));
        }
    }

    // 如果窗口正在显示，先保持隐藏状态更新内容
    lv_obj_add_flag(login_error, LV_OBJ_FLAG_HIDDEN);

    // 设置错误信息
    lv_label_set_text(error_label, error_message);
    if(mode == 1) {
        lv_obj_set_style_text_color(error_label, lv_color_hex(BLACK), 0);
    } else {
        lv_obj_set_style_text_color(error_label, lv_color_hex(RED), 0);
    }

    // 取消之前的定时器
    if(error_timer) {
        lv_timer_del(error_timer);
        error_timer = NULL;
    }

    // 直接显示窗口（不添加延迟）
    lv_obj_clear_flag(login_error, LV_OBJ_FLAG_HIDDEN);
    lv_obj_move_foreground(login_error);

    // 创建新的定时器
    error_timer = lv_timer_create(timer_cb, 3000, NULL);
}

// 隐藏错误窗口
void hide_error_window(lv_event_t * e)
{
    hide_error_cb(e);
}

void create_error_window(int mode)
{
    if(login_error != NULL) return;

    login_error = lv_obj_create(lv_scr_act());
    if(mode == 1) {
        lv_obj_set_size(login_error, LV_PCT(30), LV_PCT(20));
    } else {
        lv_obj_set_size(login_error, LV_PCT(60), LV_PCT(20));
    }

    lv_obj_set_style_bg_color(login_error, lv_color_make(255, 255, 255), 0);
    lv_obj_set_style_pad_all(login_error, 0, 0);
    lv_obj_set_style_radius(login_error, 10, 0);
    lv_obj_align(login_error, LV_ALIGN_TOP_MID, 0, 20);
    lv_obj_add_flag(login_error, LV_OBJ_FLAG_HIDDEN);

    // 添加点击隐藏功能
    lv_obj_add_event_cb(login_error, hide_error_cb, LV_EVENT_CLICKED, NULL);

    // 创建错误信息标签
    error_label = lv_label_create(login_error);
    lv_obj_set_size(error_label, LV_PCT(80), LV_PCT(30));
    lv_label_set_long_mode(error_label, LV_LABEL_LONG_WRAP);
    lv_obj_set_style_text_color(error_label, lv_color_make(0, 0, 0), 0);
    LV_FONT_DECLARE(SourceHanSansCN_Bold_20);
    lv_obj_set_style_text_font(error_label, &SourceHanSansCN_Bold_20, LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_center(error_label);
    lv_label_set_text(error_label, "错误信息");

    // 创建关闭按钮
    // lv_obj_t * close_btn = lv_btn_create(login_error);
    // lv_obj_set_size(close_btn, 30, 30);
    // lv_obj_set_pos(close_btn, LV_PCT(80), LV_PCT(35));
    // lv_obj_set_style_radius(close_btn, 15, 0);
    // lv_obj_add_event_cb(close_btn, hide_error_cb, LV_EVENT_CLICKED, NULL);

    // lv_obj_t * close_label = lv_label_create(close_btn);
    // lv_label_set_text(close_label, "X");
    // lv_obj_center(close_label);
    // lv_obj_set_style_text_color(close_label, lv_color_white(), 0);
}
